package com.webvihar.access2db.dbutils;

import java.util.ArrayList;
import java.util.List;

public class MySqlDataTypes extends AbstractDataTypes {

	public final String [] dataTypes = {   "TINYINT",
			"SMALLINT",
			"MEDIUMINT", 
			"INT",
			"BIGINT",
			"ENUM",
			"FLOAT",
			"DOUBLE",
			"DECIMAL",
			"CHAR",
			"VARCHAR",
			"TINYTEXT",
			"TEXT",
			"MEDIUMTEXT",
			"LONGTEXT",
			"BINARY",
			"VARBINARY",
			"TINYBLOB",
			"BLOB",
			"MEDIUMBLOB",
			"LONGBLOB",
			"DATE",
			"TIME",
			"YEAR",
			"DATETIME",
			"TIMESTAMP",
			"POINT",
			"LINESTRING",
			"POLYGON",
			"GEOMETRY",
			"MULTIPOINT",
			"MULTILINESTRING",
			"MULTIPOLYGON",
			"GEOMETRYCOLLECTION",
			"BIT",
			"SET",
	};

	
	public List<DataType> datatypes;

	public MySqlDataTypes() {
		setupDataTypes();
	}
	
	// TODO : Update the datatype properties with reference to Heidi SQL
	public void setupDataTypes() {
		datatypes = new ArrayList<DataType>();
		datatypes.add(new DataType("TINYINT", true, true, true, true, true,true, true));
		datatypes.add(new DataType("SMALLINT", true, true, true, true, true,true, true));
		datatypes.add(new DataType("MEDIUMINT",  true, true, true, true, true,true, true));
		datatypes.add(new DataType("INT", true, true, true, true, true,true, true));
		datatypes.add(new DataType("BIGINT", true, true, true, true, true,true, true));
		datatypes.add(new DataType("ENUM", true, true, true, true, true,false, true));
		datatypes.add(new DataType("FLOAT", true, true, true, true, true,true, true));
		datatypes.add(new DataType("DOUBLE", true, true, true, true, true,true, true));
		datatypes.add(new DataType("DECIMAL", true, true, true, true, true,true, true));
		datatypes.add(new DataType("CHAR", true, false, false, true, true,true, true));
		datatypes.add(new DataType("VARCHAR", true, false, false, true, true,true, true));
		datatypes.add(new DataType("TINYTEXT",true, false, false, true, true,true, true));
		datatypes.add(new DataType("TEXT", true, false, false, true, true,true, true));
		datatypes.add(new DataType("MEDIUMTEXT", true, false, false, true, true,true, true));
		datatypes.add(new DataType("LONGTEXT", true, false, false, true, true,true, true));
		datatypes.add(new DataType("BINARY", true, false, false, true, true,true, true));
		datatypes.add(new DataType("VARBINARY", true, false, false, true, true,true, true));
		datatypes.add(new DataType("TINYBLOB", true, false, false, true, true,true, true));
		datatypes.add(new DataType("BLOB", true, false, false, true, true,true, true));
		datatypes.add(new DataType("MEDIUMBLOB",true, false, false, true, true,true, true));
		datatypes.add(new DataType("LONGBLOB", true, false, false, true, true,true, true));
		datatypes.add(new DataType("DATE", true, false, false, true, true,true, true));
		datatypes.add(new DataType("TIME", true, false, false, true, true,true, true));
		datatypes.add(new DataType("YEAR", true, false, false, true, true,true, true));
		datatypes.add(new DataType("DATETIME", true, false, false, true, true,true, true));
		datatypes.add(new DataType("TIMESTAMP", true, false, false, true, true,true, true));
		datatypes.add(new DataType("POINT", true, false, false, true, true,true, true));
		datatypes.add(new DataType("LINESTRING", true, false, false, true, true,true, true));
		datatypes.add(new DataType("POLYGON", true, false, false, true, true,true, true));
		datatypes.add(new DataType("GEOMETRY", true, false, false, true, true,true, true));
		datatypes.add(new DataType("MULTIPOINT", true, false, false, true, true,true, true));
		datatypes.add(new DataType("MULTILINESTRING", true, false, false, true, true,true, true));
		datatypes.add(new DataType("MULTIPOLYGON", true, false, false, true, true,true, true));
		datatypes.add(new DataType("GEOMETRYCOLLECTION", true, false, false, true, true,true, true));
		datatypes.add(new DataType("BIT", true, false, false, true, true,true, true));
		datatypes.add(new DataType("SET", true, false, false, true, true,true, true));
	}

	public String getProcessedParameter(String parameter, String type) {
		if(type.equalsIgnoreCase(INTEGER)){
			return (parameter == null) ? "null" : parameter;
		} else if(type.equalsIgnoreCase(TINYINT)) {
			return (parameter == null) ? "null" : parameter;
		}else if(type.equalsIgnoreCase(SMALLINT)) {
			return (parameter == null) ? "null" : parameter;
		}else if(type.equalsIgnoreCase(MEDIUMINT)) {
			return (parameter == null) ? "null" : parameter;
		}else if(type.equalsIgnoreCase(BIGINT)) {
			return (parameter == null) ? "null" : parameter;
		}else if(type.equalsIgnoreCase(FLOAT)) {
			return (parameter == null) ? "null" : parameter;
		}else if(type.equalsIgnoreCase(DOUBLE)) {
			return (parameter == null) ? "null" : parameter;
		}else if(type.equalsIgnoreCase(DECIMAL)) {
			return (parameter == null) ? "null" : parameter;
		}else if(type.equalsIgnoreCase(VARCHAR)){
			return (parameter == null) ? "null" : String.format("'%s'", parameter);
		}else {
			return parameter;
		}
	}
}
